/*
 * Juego.h
 *
 *  Created on: 18/10/2012
 *      Author: Ignacio Galvez
 */

#ifndef JUEGO_H_
#define JUEGO_H_
#include <string>
#include <map>
#include <list>

class Nivel;
class Mundo;
class Motor;
class Jugador;
class Record;
class Partida;
class Juego {
/**/

public:
	Juego();	
	// devuelve el jugador agregado a la partida
	Jugador* agregarJugador(std::string& nombreJugador);
	Partida* crearPartida();
	void iniciarPartida();
	void run(double ticks);
	void nuevoRecord();
	void pausarPartida();
	bool finalizoNivel();
	void reanudar();
	void consultarRecords();
	virtual ~Juego();
private:
	Mundo* mundoActual;
	Nivel* nivelActual;
	Motor* motor;
	std::map<std::string,Jugador*> jugadores;
	std::map<std::string,Mundo*> mundos;
	std::list<Record*> tablaDeRecords;
	bool enEspera;
	int cantidadActualDeJugadores;
	void elegirNivel(int numeroNivel);
	Partida* partida;
	bool esperarJugadores();
	void elegirMundo(std::string nombreMundo);
};

#endif /* JUEGO_H_ */
